package com.knowledge.plus.java8;

/**
 * java8中的接口：
 * 当实现的多个接口中有相同签名的方法时，必须在实现类中通过重写方法解决冲突问题，否者无法通过编译，
 * 在重写的方法中可以通过 接口名.super.方法名(); 的方式显示调用需要的方法。
 */
public interface InterfaceMethod<T> {

    // 接口中的属性
    public static final String name = "张三三";

    /**
     * 普通方法
     */
    public abstract void ordinaryMethod(T t);

    /**
     * 默认方法
     */
    default void print1() {
        System.out.println("我是接口中的默认方法，可以有实现，而且不需要实现类去实现。");
    }

    /**
     * 静态方法
     */
    static void print2() {
        System.out.println("我是接口中的静态方法。");
    }

}

/**
 * 实现类
 */
class InterfaceMethodImpl implements InterfaceMethod<Object> {

    @Override
    public void ordinaryMethod(Object obj) {
        System.out.println("必须实现接口中的普通方法");
    }

    @Override
    public void print1() {
        // InterfaceMethod.super.print1();  // 显示调用
        System.out.println("默认方法 可以实现也可以不实现");
    }

}

